/**
 * 题目集相关API接口
 * 提供题目集的创建、查询、管理等功能
 */

import { http } from "@/utils/core/http"
import { apiWrapper } from "@/utils/core/api-wrapper"

/**
 * 获取题目集列表
 * @param {Object} params - 查询参数
 * @param {string} params.keyword - 关键词搜索
 * @param {string} params.type - 查询类型（MY/PUBLIC）
 * @param {number} params.pageNum - 页码
 * @param {number} params.pageSize - 每页大小
 * @returns {Promise} 返回题目集列表数据
 */
export function getProblemSetList(params = {}) {
  return apiWrapper(() => 
    http.get("/problemSet/list", {
      params: {
        keyword: params.keyword || "",
        type: params.type || "PUBLIC",
        pageNum: params.pageNum || 1,
        pageSize: params.pageSize || 12,
      }
    })
  );
}

/**
 * 获取题目集详情
 * @param {number} id - 题目集ID
 * @returns {Promise} 返回题目集详情数据
 */
export function getProblemSetDetail(id) {
  return apiWrapper(() => http.get(`/problemSet/${id}`));
}

/**
 * 创建题目集
 * @param {Object} data - 题目集数据
 * @param {string} data.name - 题目集名称
 * @param {string} data.description - 描述
 * @param {boolean} data.isPublic - 是否公开
 * @param {Array} data.problemIds - 题目ID列表
 * @returns {Promise} 返回创建结果
 */
export function createProblemSet(data) {
  return apiWrapper(() => 
    http.post("/problemSet", {
      name: data.name,
      description: data.description || "",
      isPublic: data.isPublic !== undefined ? data.isPublic : false,
      problemIds: data.problemIds || [],
    })
  );
}

/**
 * 更新题目集
 * @param {number} id - 题目集ID
 * @param {Object} data - 更新数据
 * @returns {Promise} 返回更新结果
 */
export function updateProblemSet(id, data) {
  return apiWrapper(() => http.put(`/problemSet/${id}`, data));
}

/**
 * 删除题目集
 * @param {number} id - 题目集ID
 * @returns {Promise} 返回删除结果
 */
export function deleteProblemSet(id) {
  return apiWrapper(() => http.delete(`/problemSet/${id}`));
}

/**
 * 通过邀请码加入题目集
 * @param {Object} data - 包含邀请码的对象
 * @param {string} data.inviteCode - 邀请码
 * @returns {Promise} 返回加入结果
 */
export function joinProblemSet(data) {
  return apiWrapper(() => 
    http.post("/problemSet/join", {
      inviteCode: data.inviteCode,
    })
  );
}

/**
 * 生成新邀请码
 * @param {number} id - 题目集ID
 * @param {number} days - 有效天数（0=永久，>0=临时）
 * @returns {Promise} 返回新邀请码
 */
export function generateInviteCode(id, days = 0) {
  return apiWrapper(() => http.post(`/problemSet/${id}/invite`, { days }));
}

/**
 * 获取题目集成员列表
 * @param {number} id - 题目集ID
 * @param {Object} params - 分页参数
 * @param {number} params.pageNum - 页码
 * @param {number} params.pageSize - 每页大小
 * @returns {Promise} 返回成员列表
 */
export function getProblemSetMembers(id, params = {}) {
  return apiWrapper(() => 
    http.get(`/problemSet/${id}/members`, {
      params: {
        pageNum: params.pageNum || 1,
        pageSize: params.pageSize || 10,
      }
    })
  );
}

/**
 * 管理员获取所有题目集列表
 * @param {Object} params - 查询参数
 * @param {string} params.keyword - 关键词搜索
 * @param {string} params.status - 状态筛选（ACTIVE/ARCHIVED）
 * @param {number} params.pageNum - 页码
 * @param {number} params.pageSize - 每页大小
 * @returns {Promise} 返回题目集列表数据
 */
export function adminGetProblemSets(params = {}) {
  return apiWrapper(() => 
    http.get("/problemSet/admin/list", {
      params: {
        keyword: params.keyword || "",
        status: params.status || "",
        pageNum: params.pageNum || 1,
        pageSize: params.pageSize || 10,
      }
    })
  );
}

/**
 * 管理员更新题目集状态
 * @param {number} id - 题目集ID
 * @param {string} status - 新状态（ACTIVE/ARCHIVED）
 * @returns {Promise} 返回更新结果
 */
export function adminUpdateProblemSetStatus(id, status) {
  return apiWrapper(() => http.put(`/problemSet/${id}`, { status }));
}

/**
 * 管理员删除题目集（软删除）
 * @param {number} id - 题目集ID
 * @returns {Promise} 返回删除结果
 */
export function adminDeleteProblemSet(id) {
  return apiWrapper(() => http.delete(`/problemSet/${id}`));
}

/**
 * 为题目集添加题目（创建者）
 * @param {number} setId - 题目集ID
 * @param {Object} data - 题目数据
 * @param {number} data.problemId - 题目ID
 * @param {number} data.sortOrder - 排序序号（可选）
 * @param {number} data.targetScore - 目标分数（可选，默认100）
 * @returns {Promise} 返回添加结果
 */
export function addProblemToSet(setId, data) {
  return apiWrapper(() => 
    http.post(`/problemSet/${setId}/problems`, {
      problemId: data.problemId,
      sortOrder: data.sortOrder,
      targetScore: data.targetScore || 100,
    })
  );
}

/**
 * 批量添加题目到题目集
 * @param {number} setId - 题目集ID
 * @param {Array} problems - 题目数组 [{ problemId, sortOrder, targetScore }, ...]
 * @returns {Promise} 返回批量添加结果
 */
export function batchAddProblemsToSet(setId, problems) {
  return apiWrapper(() => 
    Promise.all(
      problems.map(problem => addProblemToSet(setId, problem))
    )
  );
}

/**
 * 从题目集移除题目（需要后端补充接口）
 * @param {number} setId - 题目集ID
 * @param {number} problemId - 题目ID
 * @returns {Promise} 返回删除结果
 */
export function removeProblemFromSet(setId, problemId) {
  return apiWrapper(() => http.delete(`/problemSet/${setId}/problems/${problemId}`));
}
